/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package datosServer;

/**
 *
 * @author mimi
 */

import datosServer.ListaUsuario;
import datosServer.Usuario;
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;

/**
 *
 * @author Daniela
 */
public class Archivo {

    private static String rutaArchivo = "/home/mimi/Desktop/iDominoDMB/Server/src/datosServer/DatosUsuarios.xml";
   //  private static String rutaArchivo = "O:\\Users\\Daniela\\Documents\\iDomino\\Server\\src\\datosServer\\DatosUsuarios.xml";

  //  private static String rutaArchivoSal = "src\\datos\\DatosUsuariosSal.xml";

     public static boolean leerArchivoXMLUsuarios(ListaUsuario listaDeUsuarios)
    {
        try
        {
            SAXBuilder builder = new SAXBuilder();

            /* Se crea un documento nuevo con el nombre del archivo */
            Document doc = builder.build(rutaArchivo);

            /* Se obtiene la raíz del archivo (la etiqueta inicial) */
            Element raiz = doc.getRootElement();
            if (raiz == null)
                return false;
            else
            {
                /* Se puede obtener el atributo de la raíz (de la etiqueta) */
                System.out.println(raiz.getAttributeValue("tipo"));

                /* Se obtienen todos los hijos cuya etiqueta esa "usuario"  */
                /* y se asignan esos hijos a un List                        */
                List listaUsuarios = raiz.getChildren("usuario");

                System.out.println("Formada por:" + listaUsuarios.size() + " usuarios");
                System.out.println("------------------");

                 /* Se genera un iterador para recorrer el List que se generó */
                Iterator i = listaUsuarios.iterator();

                /* Se recorre el List */
                while (i.hasNext())
                {
                    /* Se obtiene cada uno y se asigna a un objeto de tipo Element */
                    Element e = (Element) i.next();


                    Element nombre = e.getChild("nombre");
                    Element apellido = e.getChild("apellido");
                    Element nickname = e.getChild("nickname");
                    Element clave = e.getChild("clave");
                    Element imagen = e.getChild("imagen");
                    Element fecha = e.getChild("fecha");
                    Element dia = e.getChild("dia");
                    Element mes = e.getChild("mes");
                    Element año = e.getChild("año");

                    int diaI,mesI,añoI,imagenI;
                    //Jcalendar2 fechaS = new Jcalendar2();
                    String diaS,mesS,añoS,imagenS;
                    diaS = mesS = añoS = imagenS = "";

                    imagenS = imagen.getText();
                    diaS = dia.getText();
                    mesS = mes.getText();
                    añoS = año.getText();

                    imagenI = Integer.parseInt(imagenS);

                    Avatar imagenA = new Avatar();
                    imagenA.setID(imagenI);
                    diaI = Integer.parseInt(diaS);
                    mesI = Integer.parseInt(mesS);
                    añoI = Integer.parseInt(añoS);
                    //fechaS = new Jcalendar2(diaI,mesI,añoI);

                    /* Se crea un nodo nuevo con la información y se agrega a la lista de usuarios */
                    Usuario elNodo = new Usuario(nickname.getText(),clave.getText(),nombre.getText(),apellido.getText(),diaI,mesI,añoI,imagenA);
                    listaDeUsuarios.agregarElemento(elNodo);
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return true;
    }


     public static void guardarArchivoXMLUsuarios(ListaUsuario listaDeUsuarios)
     {
        Usuario nodoAuxiliar;

        /* Se crea una raiz de la estructura */
        Element root = new Element("usuarios");

        /* Es posible agregar atributos a la estructura inicial */
        root.setAttribute("tipo","lista de usuarios");

        Iterator iterador = listaDeUsuarios.getIterator();

        while (iterador.hasNext())
        {
            /* Se crea la etiqueta "usuario" */
            Element usuarios = new Element("usuario");

            nodoAuxiliar = (Usuario) iterador.next();

            /* Se crean las etiquetas nombre, apellido y cargo */
            Element nombre = new Element("nombre");
            Element apellido = new Element("apellido");
            Element nickname = new Element("nickname");
            Element clave = new Element("clave");
            Element imagen = new Element("imagen");
            Element dia = new Element("dia");
            Element mes  = new Element("mes");
            Element año = new Element("año");
            //Element fecha = new Element("fecha");

            String diaS,mesS,añoS, fechaS,imagenF;
            diaS = mesS = añoS = fechaS = imagenF = "";
          //  fechaS = String.valueOf(nodoAuxiliar.getFechaNac());
            diaS = String.valueOf(nodoAuxiliar.getDia());
            mesS = String.valueOf(nodoAuxiliar.getMes());
            añoS = String.valueOf(nodoAuxiliar.getAño());
            imagenF = String.valueOf(nodoAuxiliar.getAvatar().getID());
            /* Se inicializa cada etiqueta con sus valores de la lista */
            nombre.setText(nodoAuxiliar.getNombre());
            apellido.setText(nodoAuxiliar.getApellido());
            nickname.setText(nodoAuxiliar.getNickname());
            clave.setText(nodoAuxiliar.getClave());
            imagen.setText(imagenF);
            dia.setText(diaS);
            mes.setText(mesS);
            año.setText(añoS);
           // fecha.setText(fechaS);
            /* Se añaden las etiquetas a la etiqueta principal (usuario)    */
            /* estableciendo que un usuario tiene nombre, apellido y cargo  */
            usuarios.addContent(nombre);
            usuarios.addContent(apellido);
            usuarios.addContent(nickname);
            usuarios.addContent(clave);
            usuarios.addContent(imagen);
         //   usuarios.addContent(fecha);
            usuarios.addContent(dia);
            usuarios.addContent(mes);
            usuarios.addContent(año);

            /* Se añade el nuevo usuario a la estructura XML */
            root.addContent(usuarios);
         }

        /* Se crea un documento nuevo */
        Document doc = new Document(root);

        try
        {
            /* Se genera un flujo de salida de datos XML */
            XMLOutputter out = new XMLOutputter();

            /* Se asocia el flujo de salida con el archivo donde se guardaran los datos */
            FileOutputStream file = new FileOutputStream(rutaArchivo);

            /* Se manda el documento generado hacia el archivo XML */
            out.output(doc,file);

            /* Se limpia el buffer ocupado por el objeto file y se manda a cerrar el archivo */
            file.flush();
            file.close();

            /* En este caso se manda a imprimir el archivo por la consola   */
            /* ESTE PROCESO NO ES OBLIGATORIO PARA PROCESAR EL XML          */
            out.output(doc,System.out);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
     }
}
